package com.zenq.ssm.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.zenq.ssm.entity.Order;
import com.zenq.ssm.entity.OrderDetail;
import com.zenq.ssm.entity.User;
import com.zenq.ssm.mapper.OrderDetailMapper;
import com.zenq.ssm.mapper.OrderMapper;
import com.zenq.ssm.web.entity.CartItem;

@Service
public class OrderService {

	@Autowired
	private OrderMapper orderMapper;
	@Autowired
	private OrderDetailMapper orderDetailMapper;
	/**
	 * 查询单个订单
	 * @param orderId
	 * @return
	 */
	public Order getById(int orderId) {
		return orderMapper.selectByPrimaryKey(orderId);
	}
	
	/**
	 * 用户下单,结算功能。
	 * 结算完毕一定要记得在Controller里面清空session的购物车。
	 * @param carts 这个需要从Session中获得
	 * @param user 这个user从Session中获得当前登录用户
	 * @return
	 */
	public int placeOrder(List<CartItem> carts, User user) {
		int result = 0;
		// 1. 添加订单信息。
		Order order = new Order();
		order.setUserId(user.getUserId());//下单用户的id
		//......其他set..........
		// 注意：修改一下代码，下单时间使用MySQL数据库的NOW()函数生成，不要在代码中写死
		orderMapper.insert(order);
		// 问题：怎么知道刚刚添加的订单Id是多少？？？
		// 解答：使用MyBatis的配置->主键回填（将自动生成的Id回填到刚刚新增的对象中）
		/*                                                    ↓指定是否启用生成的主键                     ↓指定主键列的名称
<insert id="insert" parameterType="com.zenq.ssm.entity.Order" useGeneratedKeys="true" keyProperty="order_id">
    insert into tbl_order (order_id, user_id, order_time, 
      receiver, address, phone, 
      money, pay_type, status, 
      remark)                                                        ↓这里改成了数据库的NOW()函数
    values (#{orderId,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER}, NOW(), 
      #{receiver,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, 
      #{money,jdbcType=DECIMAL}, #{payType,jdbcType=TINYINT}, #{status,jdbcType=TINYINT}, 
      #{remark,jdbcType=VARCHAR})
</insert>
		 * */
		// 2. 添加订单明细。
		for (int i = 0; i < carts.size(); i++) {
			OrderDetail od = new OrderDetail();
			od.setOrderId(order.getOrderId());//通过上面的配置，已经获得了订单ID
			//......其他set..........
			orderDetailMapper.insert(od);
		}
		return result;
	}
	
	/**
	 * 所有订单列表
	 * @return
	 */
	public List<Order> getAll() {
		return orderMapper.selectAll();
	}
	/**
	 * 查询用户订单
	 * @return
	 */
	public List<Order> getUserAll(User user) {
		return orderMapper.selectByUser(user.getUserId());
	}
	/**
	 * 修改订单状态
	 * @param order
	 * @return
	 */
	public int updateStatus(Order order) {
		return orderMapper.updateByPrimaryKeySelective(order);
	}
}
